Amazon RedshiftでCOPY実行時エラーを確認する際はpsqlコマンドで『\x』と併せて使うと良い感じ
小ネタです。
Amazon Redshiftでデータ投入周りの作業を行っている際、ふとした事で掲題の情報を知り、実際使ってみたら『ええやん』となったのでご紹介してみたいと思います。
psqlにおける『\x』とは
psqlコマンドに於ける『\x』は、以下の様な形で『拡張テーブル形式モード』の切り替えを行います。
-x --expanded 拡張テーブル形式モードを有効にします。 これは\xコマンドと同じです。
実際どういう風に変わるのでしょうか。試してみましょう。これが通常時。項目が横に並んで表示される形ですね。カラム数及びその内容が表示幅に収まっていれば良いですが、そうでない場合は折り返して表示されてしまいます。(このエントリでは横に見切れて1行で表示されていますが)
# SELECT * FROM public.orders LIMIT 1; order_id | order_date | priority | quantity | sales | discount_rate | ship_mode | profit | unit_price | ad_expenses | shipping_cost | customer_name | prefecture | city | area | shop_name | customer_segment | product_category | product_sub_category | product_id | product_name | product_description | product_container | base_margin | supplier | deliver_date | ship_date ----------+------------+----------+----------+-------+---------------+------------+--------+------------+-------------+---------------+---------------+------------+------+------+-----------+------------------+------------------+----------------------+------------+--------------+---------------------------------------------------------------+-------------------+-------------+----------+--------------+------------ 97 | 2011-12-30 | 中 | 26 | 9446 | 0.03 | 通常航空便 | 2824 | 289 | 244146 | 50 | 仙波 敏男 | 栃木 | 栃木 | 関東 | Willis | 消費者 | 事務用品 | ラベル | P190 | Avery 498 | This is the field which has product description for Avery 498 | 小型ボックス | 0.38 | Argot | 2010-01-30 | 2010-01-30 (1 row)
\xコマンドを実行。切り替わった後に上記SQLを再実行してみます。すると以下のように項目名:値の形で表示されるようになりました。若干見慣れない形なので違和感はありますね。
# \x Expanded display is on. # SELECT * FROM public.orders LIMIT 1; -[ RECORD 1 ]--------+-------------------------------------------------------------- order_id | 97 order_date | 2011-12-30 priority | 中 quantity | 26 sales | 9446 discount_rate | 0.03 ship_mode | 通常航空便 profit | 2824 unit_price | 289 ad_expenses | 244146 shipping_cost | 50 customer_name | 仙波 敏男 prefecture | 栃木 city | 栃木 area | 関東 shop_name | Willis customer_segment | 消費者 product_category | 事務用品 product_sub_category | ラベル product_id | P190 product_name | Avery 498 product_description | This is the field which has product description for Avery 498 product_container | 小型ボックス base_margin | 0.38 supplier | Argot deliver_date | 2010-01-30 ship_date | 2010-01-30 #
通常のシーンであればあまり使い勝手も無い?ような気がするこのオプションですが、ふと『あれ、これってRedshiftのCOPY処理でエラー出た時の確認で参照するテーブル(stl_load_errors)で使えば良さげじゃね?』と思いたち、試してみました。
通常実行時だとこのような見栄えになります。内容的には分かるといえばわかりますが見づらいですね。
これを拡張テーブル形式モードで表示しています。素敵ですね!
以前のエントリで同じ趣旨の内容を書いていましたが、こちらのSQLを使う事無く、表示切り替えでテーブルの内容をそのまま出すだけで十分わかりやすい、スマートな表示を行う事が出来ました。
# \x Expanded display is on. # SELECT * FROM stl_load_errors ORDER BY starttime DESC LIMIT 1; -[ RECORD 1 ]---+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- userid | 100 slice | 3 tbl | 650906 starttime | 2017-02-14 xx:xx:xx.xxxxxx session | 24392 query | 480537 filename | s3://xxxxxxxxxxx/xxxxxxxx/sample-xxxxxxx.csv line_number | 1 colname | userid type | char col_length | 5 position | 2 raw_line | 'userid','username','userdata','regdate' raw_field_value | userid err_code | 1204 err_reason | Char length exceeds DDL length
まとめ
ちなみにこの表示モードを元に戻す場合は再度『\x』を実行する事で対応出来ます。
# \x Expanded display is off.
今回のケースではRedshiftの作業に於けるCOPY処理エラーの内容について、更にはpsqlコマンド限定という若干(十分)ニッチな範囲の内容となりますが、この辺りの作業を日々行っている方々であればこの『ええやん!』な気持ち、お分かり頂ける事かと思います。小技ではありますが見づらいデータがあった場合にはこの『\x』コマンドをお試しになってみてはいかがでしょうか。